package com.joker.utils;

import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.springframework.stereotype.Component;
import org.xm.Similarity;

import java.util.ArrayList;
import java.util.List;
/**
 * 将敏感字符屏蔽工具类
 * @author 22772
 */
@Component
public class AnsjUtil {

    //记录需要屏蔽的字符
    public static List<String> wordDonNotRead = new ArrayList(){
        {
            add("操");add("杀人");add("逼");
            add("屎");add("fuck");add("屌");
            add("骚");add("贱");add("艹");
        }
    };

    public static StringBuffer parseStr(String str) {
        //需要返回的字符串
        StringBuffer AnsjStr = new StringBuffer();
        //标志符号，0代表词语不需要屏蔽
        int flag = 0;
        //调用ansj分词器，并将分好的词语存入结果集
        Result result = ToAnalysis.parse(str);
        //获取结果集中分好的词语，并存入列表
        List<Term> terms = result.getTerms();
        //循环列表
        for (int i = 0; i < terms.size(); i++) {
            //从列表中得到词语
            String word1 = terms.get(i).getName();
            //获取该词语的长度
            int l = word1.length();
            //循环敏感词汇列表
            for (String word2 : wordDonNotRead){
                //调用计算相似度方法
                double charBasedSimilarityResult = Similarity.charBasedSimilarity(word1, word2);
                //如果该词语与敏感词汇列表中的某个词汇相似度超过0.5
                if(charBasedSimilarityResult > 0.5){
                    System.out.println(word1 + " vs " + word2 + " 字面相似度值：" + charBasedSimilarityResult);
                    //将标识符设为1，代表需要屏蔽
                    flag = 1;
                    //退出循环
                    break;
                }
            }
            //根据词语长度添加多个*
            if(flag == 1){
                if(l == 1){
                    AnsjStr.append("*");
                }else if(l == 2) {
                    AnsjStr.append("**");
                }else {
                    AnsjStr.append("f**k");
                }
            }else {
                //不需要屏蔽的词汇直接加到字符串末尾
                AnsjStr.append(word1);
            }
            //将标识符设回0
            flag = 0;
        }
        return AnsjStr;
    }
}
